package interfaz;

import objetos.personajes.*;
import objetos.*;
import mundo.*;
import java.awt.*;
import java.awt.image.*;

/**
 *
 * @author Miguel
 */
public class Dibujador {

    private int A;
    private int B;

//  <editor-fold defaultstate="collapsed" desc="Constructor">
    public Dibujador(int a, int b) {
	this.A = a;
	this.B = b;

    }
//  </editor-fold>

//  <editor-fold defaultstate="collapsed" desc="Get & Set">
    public int getA() {
	return A;
    }

    public void setA(int A) {
	this.A = A;
    }

    public int getB() {
	return B;
    }

    public void setB(int B) {
	this.B = B;
    }
    //  </editor-fold>

//  <editor-fold defaultstate="collapsed" desc="Todos los mostrar">
    public void MostrarMapa(Graphics2D graph2D, Mapa mapa, int xCentro, int yCentro, ImageObserver observer) {
	Image img_iso = Imagenes.pasto_2;//pasto marron
	Image img_pasto_1 = Imagenes.pasto_1;//pasto verde
	Image img_tree_1 = Imagenes.tree_1;//bordes

	int i = 330; // posicion horizontal (pixel)
	int j = 100; // posicion vertical (pixel)
	int k = 0; // k-esima celda de la fila m a imprimir (matriz)
	int m = 0; // m-esima fila a imprimir (matriz)

	for (int y = yCentro - this.B; y <= (yCentro + this.B); y++) {

	    k = 0;
	    for (int x = xCentro - this.A; x <= (xCentro + this.A); x++) {

		if (y >= 0 && y < mapa.getN() && x >= 0 && x < mapa.getM()) {
		    if (y == yCentro && x == xCentro) {
			graph2D.drawImage(img_iso, getIsoX(i, k, m), getIsoY(j, k, m), observer);
		    }
                    else {
			graph2D.drawImage(img_pasto_1, getIsoX(i, k, m), getIsoY(j, k, m), observer);
		    }
                    if(mapa.getCelda(x, y).getObjeto() instanceof Personaje){
                        if(((Personaje)(mapa.getCelda(x, y).getObjeto())).isSeleccionado()==true){
                            graph2D.drawImage(img_iso, getIsoX(i, k, m), getIsoY(j, k, m), observer);
                        }
                    }
                    
		    Dibujar(graph2D, mapa.getCelda(x, y), getIsoX(i, k, m), getIsoY(j, k, m), observer);//aqui debe imprimir los objetos
		} else {
		    graph2D.drawImage(img_tree_1, getIsoX(i, k, m) + 5, getIsoY(j, k, m) - 5, observer);
		}
		k++;

	    }

	    m++;

	}
    }


//  </editor-fold>

//  <editor-fold defaultstate="collapsed" desc="Dibujar">
    private void Dibujar(Graphics2D graph2D, Celda celda, int x, int y, ImageObserver observer) {
	Object objeto = celda.getObjeto();

	Image img_mina1 = Imagenes.mina_1;
	Image img_aldea = Imagenes.aldea;

	Image img_mina2 = Imagenes.mina_2;
	Image img_box = Imagenes.box;
	Image img_mando = Imagenes.mando;
	Image img_controles = Imagenes.controles;
	Image img_redes = Imagenes.red_social;
	Image img_recursos = Imagenes.recursos;


	Image img_principales[] = {Imagenes.pikachu, Imagenes.mario};
	Image img_artilleros[] = {Imagenes.mew, Imagenes.bill};
	Image img_rabonas[] = {Imagenes.pokeball, Imagenes.star};
	Image img_infantes[] = {Imagenes.charmander, Imagenes.megaman};
	Image img_indigenas[] = {Imagenes.bulbasaur, Imagenes.dk};
	Image img_caballeros[] = {Imagenes.squirtle, Imagenes.sonic};


	if (objeto instanceof Obstaculo) {
	    Obstaculo obs = (Obstaculo) objeto;
	    int tipoObs = obs.getTipo();
	    switch (tipoObs) {
		case 0:
		    graph2D.drawImage(img_box, x + 8, y - 6, observer);
		    break;
		case 1:
		    graph2D.drawImage(img_mina2, x + 8, y - 3, observer);
		    break;
		case 2:
		    graph2D.drawImage(img_mina1, x + 8, y - 5, observer);
		    break;
		//default: graph2D.drawImage(img_mando, x, y, observer);break;
	    }
	}

	if (objeto instanceof Personaje) {
	    Personaje personaje = (Personaje) objeto;

	    int tipoPersonaje = personaje.getTipoPersonaje();
	    int bando = personaje.getBando();

	    /*
	    Tipo de personaje:
	    0. Personaje principal
	    1. Artillero
	    2. Caballeria
	    3. Infanteria
	    4. Indigena
	     */
	    Image aDibujar[];

	    switch (tipoPersonaje) {
		case 0:
		    aDibujar = img_principales;
		    break;
		case 1:
		    aDibujar = img_artilleros;
		    break;
		case 2:
		    aDibujar = img_caballeros;
		    break;
		case 3:
		    aDibujar = img_infantes;
		    break;
		case 4:
		    aDibujar = img_indigenas;
		    break;
		case 5:
		    aDibujar = img_rabonas;
		    break;
		default:
		    aDibujar = img_principales;
		    break;
	    }
	    graph2D.drawImage(aDibujar[bando], x + 11, y - 2, observer);
	    // graph2D.drawImage(img_pikachu, x + 12, y - 3, observer);
	}

	if (objeto instanceof Aldea) {
	    graph2D.drawImage(img_aldea, x + 8, y - 3, observer);
	}

	graph2D.drawImage(img_mando, 600, 580, observer);
	graph2D.drawImage(img_controles, 690, 590, observer);
	graph2D.drawImage(img_redes, 713, 50, observer);
	graph2D.drawImage(img_recursos, 280, 520, observer);

    }
//  </editor-fold>

//  <editor-fold defaultstate="collapsed" desc="Isometria">
//  Ecuaciones cortesia de Carlitos!
    public int getIsoX(int i, int k, int m) {
	return i + 25 * (k - m);
    }

    public int getIsoY(int j, int k, int m) {
	return j + 13 * (k + m);
    }
//  </editor-fold>
}
